
class ReportesController < ApplicationController

  def grafico_faltas_equipos
    
    estadisticas = Estadistica.find(:all);
    datos = {}
    estadisticas.each{ |estadistica|
      nombre_equipo = estadistica.equipo.nombre
      if(datos[nombre_equipo].nil?)
        datos[nombre_equipo] = [estadistica.faltas]
      else
        datos[nombre_equipo] = [datos[nombre_equipo][0] + estadistica.faltas]
      end
      
    }
#    etiquetas = {}
#    count = 0
#    datos.each_key { |key|
#      etiquetas[count] = key;
#      count = count +1;
#   }
   
   
   generar_grafico( params[:id],  datos, "Faltas vs Equipos", {0 => "Encuentros"})
  end

  def grafico_puntos_equipos
    
    estadisticas = Estadistica.find(:all);
    datos = {}
    estadisticas.each{ |estadistica|
      nombre_equipo = estadistica.equipo.nombre
      if(datos[nombre_equipo].nil?)
        datos[nombre_equipo] = [estadistica.puntos]
      else
        datos[nombre_equipo] = [datos[nombre_equipo][0] + estadistica.puntos]
      end
    }
    etiquetas = {}
    count = 0

#   datos.each_key { |key|
#      etiquetas[count] = key;
#      count = count +1;
#   }
  
   generar_grafico( params[:id],   datos, "Puntos vs Equipos", {0 => "Equipos"})
  end

  def grafico_arbitros_encuentros
    encuentros = Encuentro.find(:all);
    datos = {}
    encuentros.each{ |encuentro|
      encuentro.arbitros.each{ |arbitro|
      nombre_arbitro = arbitro.nombre
        if(datos[nombre_arbitro].nil?)
          datos[nombre_arbitro] = [1]
        else
          datos[nombre_arbitro] = [datos[nombre_arbitro][0] + 1]
        end
      }
    }
    etiquetas = {}
    count = 0

#   datos.each_key { |key|
#      etiquetas[count] = key;
#      count = count +1;
#   }
   generar_grafico( params[:id],  datos, "Arbitros vs Encuentros",{0 => "Encuentros"})
  end
  
   def pdf_medallas
      delegaciones = Delegacion.find(:all, :order => "oro DESC" )
      headers = [ "Delegacion" , "Oro" , "Plata" , "Bronce"]
      table = []
      for d in delegaciones
	      row = []
	      row << d.nombre.to_s
	      row << d.oro.to_s
              row << d.plata.to_s
	      row << d.bronce.to_s
	      table << row
      end

      generar_pdf headers, table
   end
   def pdf_encuentros_resultados
	
        headers = [ "Equipo 1" , "Equipo 2", "Puntos 1", "Puntos 2", "Fecha"  ]
	
	encuentros = Encuentro.find(:all)
        table = []
	for e in encuentros
	    row = []
	    row << e.participantes[0].nombre
	    row << e.participantes[1].nombre
	    e.estadisticas.each { |estadistica|
		row << estadistica.puntos.to_s
	    }
	    row << e.fecha.strftime("%m/%d/%Y")
	    table << row
	end
	 
	 
	generar_pdf headers, table
   end


  private
  def generar_grafico( tipo, datos, titulo = nil, etiquetas = nil)
   datos = {} if datos.nil? 
    g =  Gruff::Bar.new
    case tipo
    when "0"
        g = Gruff::Bar.new
      when "1"
         g = Gruff::Pie.new
      when "2"
            g = Gruff::Line.new
      when "3"
            g = Gruff::Net.new
    end

    datos.each { |key, valor|
      g.data(key, valor)
    }
    g.labels = etiquetas if not etiquetas.nil?
    g.title = titulo if not titulo.nil?
    send_data(g.to_blob, :disposition => 'inline', :type => 'image/png', :filename => "grafico.png")
  end

  def generar_pdf headers, table
    pdf = FPDF.new
    pdf.AddPage
    pdf.SetFont('Arial','',18)
    #Colores, ancho de lnea y fuente en negrita
    pdf.SetFillColor(255,255,255);
#    pdf.SetTextColor(255);
#    pdf.SetDrawColor(128,0,0);
#    pdf.SetLineWidth(3);
#    pdf.SetFont('','B');
    #Cabecera
    headers.size.times{ |i|
      pdf.Cell(35,7, headers[i].capitalize, 1, 0,'C', 1);
    }
    pdf.Ln();

    #Restauracin de colores y fuentes
#    pdf.SetFillColor(224,235,255);
#    pdf.SetTextColor(0);
#    pdf.SetFont('');
    #Datos
    fill=0;
    table.each { |row|
	row.each{ |val|
           pdf.Cell(35,6, val, 1, 0,'L', fill);
	}
        pdf.Ln();
        fill=!fill;
    }

    send_data pdf.Output, :filename => "reporte.pdf", :type => "application/pdf"
  end

end
